package util

import (
	"log"
	"os"

	"github.com/spf13/viper"

	"github.com/spf13/pflag"
)

var (
	Viper  = viper.New()
	config string
	Action string
	help   bool
)

// 命令参数
func parseFlag() {
	pflag.BoolVarP(&help, "help", "h", false, "帮助")
	pflag.StringVarP(&Action, "action", "a", "reliste", "脚本action参数")
	pflag.StringVarP(&config, "config", "c", "./config/", "配置目录")
	pflag.Parse()

	if help {
		pflag.PrintDefaults()
		os.Exit(0)
	}
}

// 加载配置
func init() {
	//命令参数
	parseFlag()

	Viper.SetConfigName("config")
	Viper.SetConfigType("toml")
	Viper.AddConfigPath(config)

	err := Viper.ReadInConfig()
	if err != nil {
		log.Fatalln("读取配置文件错误:", err.Error())
	}

	err = Viper.MergeInConfig()
	if err != nil {
		if _, ok := err.(viper.ConfigFileNotFoundError); ok {
			log.Fatalln("配置文件找不到:", err.Error())
		} else {
			log.Fatalln("解析配置文件错误：" + err.Error())
		}
	}

	Viper.WatchConfig()
}

// 检查配置
func CheckConfig() {
	//访问页面
	page := Viper.GetString("reliste.url")
	if page == "" {
		log.Fatalln("reliste.url 配置错误")
	}

	//时间选项配置
	specifyTimeOption := Viper.GetBool("reliste.specify_time_option")
	if !specifyTimeOption {
		log.Fatalln("reliste.specify_time_option 配置错误")
	}

	indexArr := Viper.GetIntSlice("reliste.time_option_index_range")
	if len(indexArr) != 2 {
		log.Fatalln("reliste.time_option_index_range 配置错误")
	}

	if indexArr[0] > indexArr[1] {
		log.Fatalln("reliste.time_option_index_range 配置错误")
	}
}
